package cn.csc.module.distribute.service.downline;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.module.distribute.api.downline.dto.CreateDistributeDownlineReqDTO;
import cn.csc.module.distribute.controller.admin.downline.vo.*;
import cn.csc.module.distribute.controller.app.downline.vo.AppDistributeDownlineReqVO;
import cn.csc.module.distribute.dal.dataobject.distributor.DistributorDO;
import cn.csc.module.distribute.dal.dataobject.downline.DistributeDownlineDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import javax.validation.Valid;
import java.math.BigInteger;
import java.util.Collection;
import java.util.List;

/**
 * 分销下线信息 Service 接口
 *
 * @author liuchuang
 */
public interface DistributeDownlineService extends IService<DistributeDownlineDO> {

    /**
     * 创建分销下线信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    BigInteger createDownline(@Valid DistributeDownlineCreateReqVO createReqVO);

    /**
     * 更新分销下线信息
     *
     * @param updateReqVO 更新信息
     */
    void updateDownline(@Valid DistributeDownlineUpdateReqVO updateReqVO);

    /**
     * 删除分销下线信息
     *
     * @param id 编号
     */
    void deleteDownline(BigInteger id);

    /**
     * 获得分销下线信息
     *
     * @param id 编号
     * @return 分销下线信息
     */
    DistributeDownlineDO getDownline(BigInteger id);

    /**
     * 获得分销下线信息列表
     *
     * @param ids 编号
     * @return 分销下线信息列表
     */
    List<DistributeDownlineDO> getDownlineList(Collection<BigInteger> ids);

    /**
     * 获得分销下线信息分页
     *
     * @param pageReqVO 分页查询
     * @return 分销下线信息分页
     */
    PageResult<DistributeDownlineDO> getDownlinePage(DistributeDownlinePageReqVO pageReqVO);

    /**
     * 获得分销下线信息分页
     *
     * @param pageReqVO 分页查询
     * @return 分销下线信息分页
     */
    PageResult<DistributeDownlineDO> getAppDownlinePage(AppDistributeDownlineReqVO pageReqVO);

    /**
     * 获得分销下线信息列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 分销下线信息列表
     */
    List<DistributeDownlineDO> getDownlineList(DistributeDownlineExportReqVO exportReqVO);


    /**
     * 分销员关联下线
     * @param reqDTO
     * @return
     */
    int relate(CreateDistributeDownlineReqDTO reqDTO);

    /**
     * 分销员关联下线
     * @param inviteCode 邀请码
     * @return
     */
    int relate(String inviteCode);

    /**
     * admin接口，分页列表
     * @param reqVO
     * @return
     */
    PageResult<DistributeDownlineRespVO> selectAdminPage(DistributeDownlinePageReqVO reqVO);
    /**
     * 获得分销下线信息导出列表
     *
     * @param reqVO 编号
     * @return 分销下线信息列表
     */
    List<DistributeDownlineExcelVO> getExportDownlineList(DistributeDownlinePageReqVO reqVO);
}
